package com.k.base.jdk.proxy.demo3;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

// 反射  类实例
public class Test {
    public static void main(String[] args) {
        // 创建 BmwCar 实例的 三种方式

        // 1. new 对象方式调用方法
        BmwCar bmwCar = new BmwCar();
        bmwCar.run();

        // 2.反射方式 调用方法
        try {
            Class<BmwCar> clazz = BmwCar.class;
            clazz.newInstance().run();
        } catch (Exception e) {
            e.printStackTrace();
        }

        // 3. 根据描述信息反射 调用方法
        try {
            String fullClassName = "com.k.base.jdk.proxy.demo3.BmwCar";
            String methodNameStr = "run";
            Class<?> clazz = Class.forName(fullClassName);
            Method[] methods = clazz.getDeclaredMethods();
            for(Method method:methods){
                if(method.getName().equals(methodNameStr)){
                    method.invoke(clazz.newInstance());
                }
            }
        } catch (ClassNotFoundException | InvocationTargetException | InstantiationException | IllegalAccessException e) {
            e.printStackTrace();
        }

    }
}
